package com.myapp.struts.action;

import com.myapp.hibernate.model.Usuario;
import com.myapp.hibernate.util.UsuarioUtil;
import com.myapp.struts.form.ModificarUsuarioForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class ModificarUsuarioAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String BORRAR = "borrar";
    private static final String INPUT = "init";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        ModificarUsuarioForm formulario = (ModificarUsuarioForm) form;
        UsuarioUtil usuarioUtil = new UsuarioUtil();
        Usuario usuario = (Usuario) request.getSession().getAttribute("UsuarioLogado");
        Usuario modificado = null;

        if (request.getParameter("submit") != null) {
            if (formulario.getOldPass().equals(usuario.getPass())) {
                //si vamos a cambiar la contraseña comprobamos que haya algo escrito
                if (formulario.getPass().length() > 0 && formulario.getPass2().length() > 0) {
                    //validar que las dos contraseñas sean iguales (la nueva contraseña)
                    if (formulario.getPass2().equals(formulario.getPass())) {
                        modificado = new Usuario(formulario.getNombre(), formulario.getApellidos(), formulario.getEmail(), formulario.getPass(), 0);
                        modificado.setIdUsuario(formulario.getId());
                    } else {
                        ActionErrors errors = new ActionErrors();
                        errors.add("pass2", new ActionMessage("error.pass2"));
                        saveErrors(request, errors);
                        return mapping.findForward(INPUT);
                    }
                } else {
                    modificado = new Usuario(formulario.getNombre(), formulario.getApellidos(), formulario.getEmail(), formulario.getOldPass(), 0);
                    modificado.setIdUsuario(formulario.getId());
                }
                usuarioUtil.actualizaUsuario(modificado);
                request.getSession().setAttribute("UsuarioLogado", modificado);
                request.getSession().setAttribute("informacion", "Usuario modificado correctamente");
                return mapping.findForward(SUCCESS);
            } else {
                ActionErrors errors = new ActionErrors();
                errors.add("oldPass", new ActionMessage("error.incorrecta"));
                saveErrors(request, errors);
                return mapping.findForward(INPUT);
            }
        } else if (request.getParameter("delete") != null) {
            request.getSession().setAttribute("borrarUsuario", "o");
            return mapping.findForward(BORRAR);
            /*usuarioUtil.borrar(modificado);
             request.getSession().removeAttribute("UsuarioLogado");
             return mapping.findForward(BORRAR);*/
        }
        return mapping.findForward(INPUT);
    }
}
